export module LoaderContext { export class FileReader { private _parsePhase: number = 0;
constructor(public context: LoaderContext, path: string) { this.peFile = new PEFile(path);
this.expectedSize = pe.headers.DosHeader.byteSize/4;
parseNext(buffer: Uint32Array, offset: number, size: number): number { switch (this._parsePhase) { if (size < pe.headers.DosHeader.byteSize/4)
this.peFile.dosHeader = new pe.headers.DosHeader();
this.peFile.dosHeader.populateFromUInt32Array(buffer, offset);
var readCount = pe.headers.DosHeader.byteSize/4;
this.expectedSize = (this.peFile.dosHeader.lfanew - pe.headers.DosHeader.byteSize)/4;
if (this.expectedSize<=0) { readCount += this.expectedSize;
this.expectedSize = pe.headers.PEHeader.byteSize/4;
var stubSize = (this.peFile.dosHeader.lfanew - pe.headers.DosHeader.byteSize)/4;
this.peFile.dosStub = new Uint32Array(stubSize);
this.peFile.dosStub = <any>[];
for (var i = 0; i < stubSize; i++) { this.peFile.dosStub[i] = buffer[offset+i];
this.expectedSize = pe.headers.PEHeader.byteSize/4;
if (size < pe.headers.PEHeader.byteSize/4)
this.peFile.peHeader = new pe.headers.PEHeader();
this.peFile.peHeader.populateFromUInt32Array(buffer, offset);
var magic = buffer[offset];
var expectedSize = magic === headers.PEMagic.NT32 ? headers.OptionalHeader.coreSize32 : headers.OptionalHeader.coreSize64;
this.peFile.optionalHeader = new pe.headers.OptionalHeader();
this.peFile.optionalHeader.populateCoreFromUInt32Array(buffer, offset);
throw new Error("Fallen through.");